package com.gushenge.core.requests

import android.util.Log
import androidx.lifecycle.viewModelScope
import com.gushenge.core.base.Base
import com.gushenge.core.beans.*
import com.gushenge.core.dao.GlobalConsts
import com.gushenge.core.dao.MMKVConsts
import com.gushenge.core.httpSign
import com.gushenge.core.time
import com.gushenge.core.toast
import com.rxlife.coroutine.RxLifeScope
import com.tencent.smtt.utils.p
import kotlinx.coroutines.launch
import rxhttp.awaitResult
import rxhttp.onErrorReturn
import rxhttp.toClass
import rxhttp.wrapper.param.RxHttp

object WealRequest {
    fun pointSmall(p:Int,listener:(point:String,p:Int,max:Int,data:ArrayList<PointSmallProduct>)->Unit){
        RxLifeScope().launch {
            RxHttp.get(GlobalConsts.POINTSMALL)
                    .add("uid", MMKVConsts.uid)
                    .add("t", time)
                    .add("sign", httpSign(MMKVConsts.uid))
                    .add("p",p)
                    .add("member_id",MMKVConsts.sub)
                    .add("language", MMKVConsts.language)
                    .toClass<Codes<PointSmallProduct>>()
                    .awaitResult{
                        if(it.code==1){
                            listener(it.message,it.p,it.max_p,it.data)
                        }else{
                            it.message.toast()
                        }
                    }.onFailure {
                    it.message.toast()
                }
        }
    }
    /*我的订单*/
    fun myOrder(p:Int,listener:(p:Int,max:Int,data:ArrayList<MyOrder>)->Unit){
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.MYORDER)
                    .add("uid", MMKVConsts.uid)
                    .add("t", time)
                    .add("sign", httpSign(MMKVConsts.uid))
                    .add("p",p)
                    .add("member_id",MMKVConsts.sub)
                    .add("language", MMKVConsts.language)
                    .toClass<Codes<MyOrder>>()
                    .await()
            Log.e("myOrder: ",result.toString() )
            if(result.code==1){
                listener(result.p,result.max_p,result.data)
            }else{
                result.message.toast()
            }
        }
    }
    /*我的代金券*/
    fun myCoupon(type:Int,p:Int,listener:(p:Int,max:Int,data:ArrayList<MyCoupon>)->Unit){
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.MYCOUPON)
                    .add("uid", MMKVConsts.uid)
                    .add("t", time)
                    .add("sign", httpSign(MMKVConsts.uid))
                    .add("p",p)
                    .add("type",type)
                    .add("member_id",MMKVConsts.sub)
                    .add("language", MMKVConsts.language)
                    .toClass<Codes<MyCoupon>>()
                    .await()
            if(result.code==1){
                listener(result.p,result.max_p,result.data)
            }else{
                result.message.toast()
            }
        }
    }
    /*我的代金券*/
    fun selectProduct(id:String,listener:(code:Int)->Unit){
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}/?ct=app&ac=mall_query")
                    .add("uid", MMKVConsts.uid)
                    .add("id", id)
                    .add("member_id",MMKVConsts.sub)
                    .add("language", MMKVConsts.language)
                    .toClass<Code<String>>()
                    .await()
            listener(result.code)
        }
    }

    fun productDetail(id: String, listener: ProductDetail.()->Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.PRODUCTDETAIL)
                    .add("uid", MMKVConsts.uid)
                    .add("t", time)
                    .add("sign", httpSign(MMKVConsts.uid))
                    .add("id", id)
                    .add("member_id",MMKVConsts.sub)
                    .add("language", MMKVConsts.language)
                    .toClass<Code<ProductDetail>>()
                    .await()
            if (result.code==1){
                result.data?.listener()
            }else{
                result.message.toast()
            }
        }
    }

    fun collectCancel(id: String,type: Int, listener: ()->Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}/?ct=app&ac=shoucang_del")
                    .add("uid", MMKVConsts.uid)
                    .add("t", time)
                    .add("sign", httpSign(MMKVConsts.uid))
                    .add("id", id)
                    .add("type", type)
                    .add("member_id",MMKVConsts.sub)
                    .add("language", MMKVConsts.language)
                    .toClass<Code<String>>()
                    .await()
            if (result.code==1){
                listener()
            }else{
                result.message.toast()
            }
        }
    }
    fun dealList(sort: Int,system: Int,p: Int, keyword:String,listener: DealList.()->Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}/?ct=app&ac=trade")
                    .add("uid", MMKVConsts.uid)
                    .add("t", time)
                    .add("sign", httpSign(MMKVConsts.uid))
                    .add("sort", sort)
                    .add("keyword", keyword)
                    .add("p", p)
                    .add("system", system)
                    .add("member_id",MMKVConsts.sub)
                    .add("language", MMKVConsts.language)
                    .toClass<Code<DealList>>()
                    .await()
            if (result.code==1){
                result.data?.listener()
            }else{
                result.message.toast()
            }
        }
    }

    fun share(listener: Share.()->Unit) {
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.SHARE)
                    .add("uid", MMKVConsts.uid)
                    .add("t", time).add("member_id",MMKVConsts.sub)
                    .add("sign", httpSign(MMKVConsts.uid))
                    .add("language", MMKVConsts.language)
                    .toClass<Code<Share>>()
                    .await()
            Log.e( "share: ",result.toString() )
            if (result.code==1){
                result.data?.listener()
            }else{
                result.message.toast()
            }
        }
    }

    fun getSignInfo(listener: SignV3.() -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}?ct=app&ac=my_sign")
                    .add("uid", MMKVConsts.uid)
                    .add("t", time).add("member_id",MMKVConsts.sub)
                    .add("sign", httpSign(MMKVConsts.uid))
                    .add("language", MMKVConsts.language)
                    .toClass<Code<SignV3>>()
                    .await()
            if (result.code==1){
                result.data?.listener()
            }else{
                result.message.toast()
            }
        }
    }

    fun TodayTask(listener: ArrayList<Task>.() -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}?ct=app&ac=dayrenwu")
                .add("uid", MMKVConsts.uid)
                .add("t", time).add("member_id",MMKVConsts.sub)
                .add("sign", httpSign(MMKVConsts.uid))
                    .add("language", MMKVConsts.language)
                .toClass<Codes<Task>>()
                .await()
            if (result.code==1){
                result.data.listener()
            }else{
                result.message.toast()
            }
        }
    }
    fun newTask(listener: ArrayList<Task>.() -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}?ct=app&ac=xsrenwu")
                .add("uid", MMKVConsts.uid)
                .add("t", time).add("member_id",MMKVConsts.sub)
                .add("sign", httpSign(MMKVConsts.uid))
                    .add("language", MMKVConsts.language)
                .toClass<Codes<Task>>()
                .await()
            if (result.code==1){
                result.data.listener()
            }else{
                result.message.toast()
            }
        }
    }
    fun getTaskPoint(type:String,listener: () -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}?ct=app&ac=take_jiangli")
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("type", type).add("member_id",MMKVConsts.sub)
                .add("sign", httpSign(MMKVConsts.uid))
                    .add("language", MMKVConsts.language)
                .toClass<Code<String>>()
                .await()
            if (result.code==1){
                listener()
            }else{
                result.message.toast()
            }
        }
    }

    fun sendShareGift(down_uid:String , money : String ,listener: () -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}?ct=app2022&ac=friend_jiangli")
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("money", money)
                .add("member_id",MMKVConsts.sub)
                .add("down_uid", down_uid)
                .add("sign", httpSign(MMKVConsts.uid))
                .add("language", MMKVConsts.language)
                .toClass<Codes<String>>()
                .await()
            result.message.toast()
            if (result.code==1){
                listener()
            }
        }
    }
    //发放记录
    fun getShareRecord(listener: ArrayList<ShareRecordBean>.() -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}?ct=app2022&ac=friend_coin_fenpei")
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("member_id",MMKVConsts.sub)
                .add("sign", httpSign(MMKVConsts.uid))
                .add("language", MMKVConsts.language)
                .toClass<Codes<ShareRecordBean>>()
                .await()
            if (result.code==1){
                listener(result.data)
            }else{
                result.message.toast()
            }
        }
    }
    // 邀请记录
    fun shareHistory(type:Int,p:Int,listener: (p:Int,max:Int,data:ArrayList<ShareHistory>) -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}?ct=app&ac=invite_record")
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("type", type).add("member_id",MMKVConsts.sub)
                .add("p", p)
                .add("sign", httpSign(MMKVConsts.uid))
                    .add("language", MMKVConsts.language)
                .toClass<Codes<ShareHistory>>()
                .await()
            if (result.code==1){
                listener(result.p,result.max_p,result.data)
            }else{
                result.message.toast()
            }
        }
    }

    // 好友邀请 累充金额 奖励金查询
    fun getShareInfo(listener: ShareInfo?.() -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.get("${Base.BASEURLV3}?ct=app2022&ac=friend_info")
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("member_id",MMKVConsts.sub)
                .add("sign", httpSign(MMKVConsts.uid))
                .add("language", MMKVConsts.language)
                .toClass<Code<ShareInfo>>()
                .await()
            if (result.code==1){
                listener(result.data)
            }else{
                result.message.toast()
            }
        }
    }
    fun signRule(listener: String.() -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.SIGN_RULE).add("member_id",MMKVConsts.sub)
                    .add("language", MMKVConsts.language)
                .toClass<Code<String>>()
                .await()
            if (result.code==1){
                result.data?.listener()
            }else{
                result.message.toast()
            }
        }
    }


    /*代金券列表*/
    fun coupons(p:Int,listener:(p:Int,max:Int,data:ArrayList<CouponGame>)->Unit){
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.COUPONS)
                    .add("uid", MMKVConsts.uid)
                    .add("t", time)
                    .add("sign", httpSign(MMKVConsts.uid))
                    .add("p",p)
                    .add("member_id",MMKVConsts.sub)
                    .add("language", MMKVConsts.language)
                    .toClass<Codes<CouponGame>>()
                    .await()
            Log.e("coupon: ",result.toString() )
            if(result.code==1){
                listener(result.p,result.max_p,result.data)
            }else{
                result.message.toast()
            }
        }
    }
    /*领取代金券*/
    fun getCoupon(id:Int,listener:()->Unit){
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.GETCOUPONS)
                    .add("uid", MMKVConsts.uid)
                    .add("t", time)
                    .add("sign", httpSign(MMKVConsts.uid))
                    .add("id",id)
                    .add("member_id",MMKVConsts.sub)
                    .add("language", MMKVConsts.language)
                    .toClass<Code<String>>()
                    .await()
            if(result.code==1){
                listener()
            }else{
                result.message.toast()
            }
        }
    }


    fun getWeal(listener: WealBean?.() -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.Weal)
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("sign", httpSign(MMKVConsts.uid))
                .add("member_id",MMKVConsts.sub)
                .add("language", MMKVConsts.language)
                .toClass<Code<WealBean>>()
                .await()
            if(result.code==1){
                listener(result.data)
            }else{
                result.message.toast()
            }
        }
    }
    // 每日任务
    fun getDailyTask(listener:DailyTaskBean?. () -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.postForm(GlobalConsts.DailyTask)
                .add("member_id", MMKVConsts.sub)
                .add("t", time)
                .add("sign", httpSign(MMKVConsts.uid))
                .add("uid", MMKVConsts.uid)
                .add("language", MMKVConsts.language)
                .toClass<Code<DailyTaskBean>>()
                .await()
            if (result.code == 1){
                listener(result.data)
            }else{
                result.message.toast()
            }
        }
    }

    // 每日任务领取奖励
    fun getDailyTaskGift(type:Int ,listener:  () -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.postForm(GlobalConsts.DailyTaskGift)
                .add("member_id", MMKVConsts.sub)
                .add("t", time)
                .add("type", type)
                .add("sign", httpSign(MMKVConsts.uid))
                .add("uid", MMKVConsts.uid)
                .add("language", MMKVConsts.language)
                .toClass<Code<String>>()
                .await()
            if (result.code == 1){
                "领取成功".toast()
                listener()
            }else{
                result.message.toast()
            }
        }
    }
    // 成长之路
    fun Growth(listener: ArrayList<GrowthBean>.() -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.Growth)
                .add("uid", MMKVConsts.uid)
                .add("member_id",MMKVConsts.sub)
                .add("t", time)
                .add("sign", httpSign(MMKVConsts.uid))
                .add("uid", MMKVConsts.uid)
                .add("language", MMKVConsts.language)
                .toClass<Codes<GrowthBean>>()
                .await()
            if(result.code==1){
                listener(result.data)
            }else{
                result.message.toast()
            }
        }
    }

    fun moneyCard (listener: MoneyCardBean?.() -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.MoneyCard)
                .add("uid", MMKVConsts.uid)
                .add("member_id",MMKVConsts.sub)
                .add("t", time)
                .add("sign", httpSign(MMKVConsts.uid))
                .add("language", MMKVConsts.language)
                .toClass<Code<MoneyCardBean>>()
                .await()
            if(result.code==1){
                listener(result.data)
            }else{
                result.message.toast()
            }
        }
    }

    fun moneyCardPay (sqk_id:String,type:String,listener: MoneyCardPayBean?.() -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.MoneyCardPay)
                .add("uid", MMKVConsts.uid)
                .add("member_id",MMKVConsts.sub)
                .add("sqk_id",sqk_id)
                .add("t", time)
                .add("sign", httpSign(MMKVConsts.uid))
                .add("type",type)
                .toClass<Code<MoneyCardPayBean>>()
                .await()
            if(result.code==1){
                listener(result.data)
            }else{
                result.message.toast()
            }
        }
    }
    fun getCardCoupon(id:String ,day :String?,listener: () -> Unit){
        RxLifeScope().launch {
            val result = RxHttp.get(GlobalConsts.GetCoupon)
                .add("uid", MMKVConsts.uid)
                .add("member_id",MMKVConsts.sub)
                .add("id",id)
                .add("t", time)
                .add("sign", httpSign(MMKVConsts.uid))
                .add("day",day)
                .toClass<Code<String>>()
                .await()
            result.message.toast()
            if(result.code==1){
                listener()
            }
        }
    }
    suspend fun getGroupChatList(listener : ArrayList<TuiQunBean>.()->Unit){
            RxHttp.postForm(GlobalConsts.QUNTUIJIAN)
                .add("uid", MMKVConsts.uid)
                .add("t", time)
                .add("sign", httpSign(MMKVConsts.uid))
                .add("member_id", MMKVConsts.sub)
                .add("language", MMKVConsts.language)
                .toClass<Codes<TuiQunBean>>()
                .awaitResult{
                    if(it.code==1){
                        listener(it.data )
                    }else{
                        it.message.toast()
                    }
                }
    }


}